package com.ll.example.springbootwebdemokotlin.controller

import com.ll.example.springbootwebdemokotlin.dao.DepartmentDao
import com.ll.example.springbootwebdemokotlin.dao.EmployeeDao
import com.ll.example.springbootwebdemokotlin.entities.Employee
import com.ll.example.springbootwebdemokotlin.entitys.User
import com.ll.example.springbootwebdemokotlin.repository.DepRepository
import com.ll.example.springbootwebdemokotlin.repository.UserRepository
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Controller
import org.springframework.ui.Model
import org.springframework.web.bind.annotation.*
import org.springframework.web.servlet.ModelAndView
import java.util.*

@Controller
class EmployeeController {
    @Autowired
    lateinit var employeeDao:EmployeeDao

    @Autowired
    lateinit var departmentDao: DepartmentDao

    @Autowired
    lateinit var userRepository: UserRepository

    @Autowired
    lateinit var depRepository: DepRepository

    //查询所有员工返回列表页面
    @GetMapping("/emps")
    fun list(model:Model):String{
        val all = employeeDao.all
        var users=userRepository.findAll()
        model.addAttribute("emps",users)
        //放在请求域中
//        model.addAttribute("emps",all)

        //返回页面
        return "emp/list"
    }

    //调用员工添加页面
    @GetMapping("/emp")
    fun toAddPage(model: Model):String{
//        val departments = departmentDao.departments
        val departments =depRepository.findAll()
        model.addAttribute("deps",departments)
        return "emp/add"
    }

    //添加员工
//    @PostMapping("/emp")
//    fun addEmp(employee: Employee):String{
//        println(employee)
//        //保存员工信息
//        employeeDao.save(employee)
//       //添加完成返回列表页面
//        //redirect:表示重定向到一个地址
//        //forward:表示转发到一个地址
//
//       return "redirect:/emps"
//    }

    @PostMapping("/emp")
    fun addEmp(employee: User):String{
        println(employee)
        //保存员工信息
        userRepository.save(employee)
        //添加完成返回列表页面
        //redirect:表示重定向到一个地址
        //forward:表示转发到一个地址

        return "redirect:/emps"
    }

    //来到修改页面，查出当前员工，在页面显示
    @GetMapping("/emp/{id}")
    fun toEditPage(@PathVariable("id") id:Int,model: Model):String{
        //查出员工信息
//        val employee = employeeDao.get(id)
//        val employee = userRepository.findById(id)
        //查出部门信息
//        val departments = departmentDao.departments

       /*  JPA2.0版本没有了findOne()方法，取而代之的是CrudRepository中的findById()，返回一个Optional，一个泛型容器，可以通过get（）获取容器里的元素。
           optional.isPresent 判断是否有返回结果
       * */
       var employee:User?=null
       val optional:Optional<User>  = userRepository.findById(id)
       if(optional.isPresent){
           employee=optional.get()
       }
        val departments = depRepository.findAll()
        println(employee)
        //写入请求域
        model.addAttribute("emp",employee)
        model.addAttribute("deps",departments)
        //回到修改页面
        return "emp/add"
    }

    //修改员工信息
//    @PutMapping("/emp")
//    fun editEmp(employee: Employee):String{
//        println(employee)
//        employeeDao.save(employee)
//       return "redirect:/emps"
//    }

    @PutMapping("/emp")
    fun editEmp(employee: User):String{
        println(employee)
        userRepository.save(employee)
        return "redirect:/emps"
    }
    //删除员工
//    @DeleteMapping("/emp/{id}")
//    fun delEmp(@PathVariable("id") id:Int):String{
//         employeeDao.delete(id)
//        return "redirect:/emps"
//    }

    @DeleteMapping("/emp/{id}")
    fun delEmp(@PathVariable("id") id:Int):String{
        userRepository.deleteById(id)
        return "redirect:/emps"
    }
}